/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ru.vsu.service;

import java.util.List;
import java.util.Random;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import ru.vsu.domain.Bid;
import ru.vsu.domain.SystemUser;
import ru.vsu.domain.Thing;
import ru.vsu.domain.dict.ThingType;

/**
 *  Сервис для работы с предметами.
 *
 * @author Roman Velichkin <vrnroman@gmail.com>
 */
@Stateless
public class ProfileService {


    @PersistenceContext(unitName="JavaForVSUPU")
    private EntityManager em;

    /**
     * Получить список вещей, принадлежащих данному пользователю.
     * @param userId
     * @return
     */
    public List<Thing> getUsersThings(Long userId) {
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery cq = cb.createQuery();
        Root<Thing> root = cq.from(Thing.class);
        cq.where(cb.equal(root.get("owner").get("id"), userId));
        cq.select(root);
        return em.createQuery(cq).getResultList();
    }

    /**
     * Получить список ставок, которые сделал данный пользователь.
     * @param userId
     * @return
     */
    public List<Bid> getUsersBid(Long userId) {
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<Bid> cq = cb.createQuery(Bid.class);
        Root<Bid> root = cq.from(Bid.class);
        cq.where(cb.equal(root.get("user").get("id"), userId));
        cq.select(root);
        return em.createQuery(cq).getResultList();
    }


    public void createSimpleThing(Long userId) {
        Thing thing = new Thing();
        int number = new Random().nextInt(10);
        String model = "Porsche Carrera GT" + number;
        thing.setAdditionalOption(model);
        thing.setOwner(em.find(SystemUser.class, userId));
        thing.setThingType(getFirstThingType());
        em.persist(thing);
    }

    private ThingType getFirstThingType() {
        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<ThingType> cq = cb.createQuery(ThingType.class);
        Root<ThingType> root = cq.from(ThingType.class);
        cq.select(root);
        return em.createQuery(cq).getResultList().get(0);
    }


}
